#pragma once

#include "gui.h"

// ButtonSwitch类，继承自UI_Object，表示一个开关按钮
class ButtonSwitch : public UI_Object
{
public:
  // 枚举类型，表示开关的状态
  enum change_t { OFF, ON };  // OFF表示关闭状态，ON表示打开状态

  // 定义状态改变回调函数的类型
  typedef void (*on_state_change_cb_t)(ButtonSwitch::change_t, void* user_data);

  // 构造函数，初始化开关按钮
  ButtonSwitch(UI_Object* parent);

  // 析构函数，释放资源
  ~ButtonSwitch();

  // 设置开关按钮的UI状态
  void set_ui_state(bool state);

  // 设置状态改变时的回调函数
  void on_switch_change(ButtonSwitch::on_state_change_cb_t cb, void* user_data);

  // 设置开关按钮的图标
  void set_icon(const lv_img_dsc_t* icon);

private:
  UI_Object* parent = NULL;                // 父对象指针
  bool state = false;                       // 当前开关状态（false表示关闭，true表示打开）

  // on_off_cb_t off_cb = NULL;
  // on_off_cb_t on_cb = NULL;
  
  on_state_change_cb_t on_state_change_cb = NULL;  // 状态改变回调函数指针
  lv_img_dsc_t* icon = NULL;                // 开关按钮的图标
  void* user_data = NULL;                   // 用户数据，用于传递给回调函数
};